package com.kinyx.framework.db.daos;

import java.util.List;

import com.kinyx.framework.db.sentence.defines.SelectResSentence;
import com.kinyx.framework.db.sentence.defines.SelectSentence;
import com.kinyx.framework.vo.OutPageData;

/**
 * 数据访问定义接口（自定义查询语句对象）
 */
public interface _Dao_Sentence_get extends __Dao {

	/**
	 * 查询单个值
	 * @param <V> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 单个值
	 * @deprecated {@link #getValue(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	<V> V getValue(DaoParam dp, SelectSentence select, Class<V> clazz);
	/**
	 * 查询列表数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 列表数据
	 * @deprecated {@link #getList(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	<B> List<B> getList(DaoParam dp, SelectSentence select, Class<B> clazz);
	/**
	 * 查询单个数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 单个数据
	 * @deprecated {@link #getOne(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	<B> B getOne(DaoParam dp, SelectSentence select, Class<B> clazz);
	/**
	 * 查询分页数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 分页数据
	 * @deprecated {@link #getPage(DaoParam, SelectResSentence, Class)}
	 */
	@Deprecated
	<B> OutPageData<B> getPage(DaoParam dp, SelectSentence select, Class<B> clazz);

	/**
	 * 查询单个值
	 * @param <V> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 单个值
	 */
	<V> V getValue(final DaoParam dp, final SelectResSentence select, final Class<V> clazz);
	/**
	 * 查询列表数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 列表数据
	 */
	<B> List<B> getList(final DaoParam dp, final SelectResSentence select, final Class<B> clazz);
	/**
	 * 查询单个数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 单个数据
	 */
	<B> B getOne(final DaoParam dp, final SelectResSentence select, final Class<B> clazz);
	/**
	 * 查询分页数据
	 * @param <B> 泛型
	 * @param dp 数据访问参数
	 * @param select 查询语句对象
	 * @param clazz 返回值类型
	 * @return 分页数据
	 */
	<B> OutPageData<B> getPage(final DaoParam dp, final SelectResSentence select, final Class<B> clazz);

}
